package pingpongdojo.newgame;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.window.Window;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.handlers.HandlerUtil;

import pingpongdojo.model.Game;
import pingpongdojo.model.GameManager;
import pingpongdojo.model.ModelFactory;
import pingpongdojo.model.User;
import pingpongdojo.model.UserManager;

/**
 * Our sample handler extends AbstractHandler, an IHandler base class.
 * 
 * @see org.eclipse.core.commands.IHandler
 * @see org.eclipse.core.commands.AbstractHandler
 */
public class NewGameHandler extends AbstractHandler {

	/**
	 * The constructor.
	 */
	public NewGameHandler() {
	}

	/**
	 * the command has been executed, so extract extract the needed information
	 * from the application context.
	 */
	public Object execute(ExecutionEvent event) throws ExecutionException {
		IWorkbenchWindow window = HandlerUtil
				.getActiveWorkbenchWindowChecked(event);

		showDialog(window);

		return null;
	}

	public static void showDialog(IWorkbenchWindow window) {
		NewGameDialog dialog = new NewGameDialog(window.getShell());
		dialog.create();
		if (dialog.open() == Window.OK) {
			System.out.println(dialog.getGameName());
			System.out.println(dialog.getPartnerUsername());

			UserManager userManager = ModelFactory.getInstance()
					.getUserManager();

			GameManager gameManager = ModelFactory.getInstance()
					.getGameManager();

			User codePlayer = userManager.getUser(dialog.getPartnerUsername());
			User testPlayer = userManager.getCurrentUser();

			Game newGame = gameManager.createGame(dialog.getGameName(),
					codePlayer, testPlayer);

			gameManager.setCurrentGame(newGame);
		}
	}
}
